/**
 * @bsp_led.c
 *
 * @copyright This file create by rensuiyi ,all right reserve!
 *
 * @author rensuiyi
 *
 * @date 20-9-28 下午7:26
 */
#include "includes.h"
#include "bsp_led.h"
#include "stm32f2xx_ll_gpio.h"

static void bsp_io_reg_init(void) {
  LL_GPIO_InitTypeDef init;

  /* enable the pin */
  LL_GPIO_StructInit(&init);

  init.Pin        = LL_GPIO_PIN_6 | LL_GPIO_PIN_7 | LL_GPIO_PIN_8 | LL_GPIO_PIN_9;
  init.Mode       = LL_GPIO_MODE_OUTPUT;
  init.OutputType = LL_GPIO_OUTPUT_PUSHPULL;

  LL_GPIO_Init(GPIOF, &init);
}

void bsp_led_on(int led_id) {
  switch (led_id) {
    case BSP_LED_1:
      LL_GPIO_SetOutputPin(GPIOF, LL_GPIO_PIN_6);
      break;
    case BSP_LED_2:
      LL_GPIO_SetOutputPin(GPIOF, LL_GPIO_PIN_7);
      break;
    case BSP_LED_3:
      LL_GPIO_SetOutputPin(GPIOF, LL_GPIO_PIN_8);
      break;
    case BSP_LED_4:
      LL_GPIO_SetOutputPin(GPIOF, LL_GPIO_PIN_9);
      break;
  }
}

/**
 * @brief toggle the led
 *
 *
 * @author rensuiyi (20-9-30)
 *
 * @param led_id
 */
void bsp_led_toggle(int led_id) {
  switch (led_id) {
    case BSP_LED_1:
      LL_GPIO_TogglePin(GPIOF, LL_GPIO_PIN_6);
      break;
    case BSP_LED_2:
      LL_GPIO_TogglePin(GPIOF, LL_GPIO_PIN_7);
      break;
    case BSP_LED_3:
      LL_GPIO_TogglePin(GPIOF, LL_GPIO_PIN_8);
      break;
    case BSP_LED_4:
      LL_GPIO_TogglePin(GPIOF, LL_GPIO_PIN_9);
      break;
  }
}

void bsp_led_off(int led_id) {
  switch (led_id) {
    case BSP_LED_1:
      LL_GPIO_ResetOutputPin(GPIOF, LL_GPIO_PIN_6);
      break;
    case BSP_LED_2:
      LL_GPIO_ResetOutputPin(GPIOF, LL_GPIO_PIN_7);
      break;
    case BSP_LED_3:
      LL_GPIO_ResetOutputPin(GPIOF, LL_GPIO_PIN_8);
      break;
    case BSP_LED_4:
      LL_GPIO_ResetOutputPin(GPIOF, LL_GPIO_PIN_9);
      break;
  }
}

int bsp_led_init(void) {
  bsp_io_reg_init();
  return 0;
}
